__version__ = "1.1.0"
from datetime import datetime, time

from dateutil.tz import datetime_exists
from django.utils import timezone
from rest_framework import serializers

def clean_datetime(value):
    """
    2025-02-08 shp 清洗时间数据
    """
    try:
        # 替换多余空格并格式化
        cleaned = value.replace('  ', ' ').rsplit(':', 1)[0]
        return timezone.datetime.strptime(cleaned, "%Y-%m-%d %H:%M")
    except ValueError as e:
        raise serializers.ValidationError(f"时间格式错误: {value}") from e

def calculate_time_difference(datetime1, datetime2):
    """
    2025-02-08 shp新增计算两个datetime对象之间的差异，并返回天数、小时数、分钟数和秒数。

    参数:
    datetime1 (datetime): 第一个datetime对象
    datetime2 (datetime): 第二个datetime对象

    返回:
    tuple: 包含天数、小时数、分钟数和秒数的元组
    """
    difference = datetime2 - datetime1
    days = difference.days
    # hours = difference.seconds // 3600  # 获取小时数（忽略分钟和秒）
    # minutes = (difference.seconds // 60) % 60  # 获取分钟数（忽略秒）
    # seconds = difference.seconds % 60  # 获取秒数

    return days

def is_weekday(date):
    """判断给定日期是否为工作日:param date: datetime.date 类型的日期:return: True 如果是工作日，False 否则"""
    return date.weekday() < 5 # weekday() 方法返回0（周一）到6（周日），我们判断是否小于5

def is_within_working_hours(datetime):
    """
    2025-02-11 shp 判断时间是否为工作时间，

    参数:
    datetime (datetime): 需要判断的datetime对象

    返回:
    bool:true 表示在工作时间，false不在工作时间
    """
    # 2025-02-11 shp 判断end时间是否为工作时间，
    endhours = datetime.hour  # 获取小时数（忽略分钟和秒）
    endminutes = datetime.minute  # 获取分钟数（忽略秒）
    # 定义开始和结束时间
    start_time = datetime.strptime('10:00', '%H:%M')
    end_time = datetime.strptime('19:30', '%H:%M')
    # 将当前时间转换为与开始和结束时间相同的格式进行比较
    current_time_for_comparison = datetime.strptime(f"{endhours}:{endminutes}", '%H:%M')
    # 判断时间段是否在10:00和19:30之间且在周一到周五之间
    if start_time <= current_time_for_comparison <= end_time and is_weekday(datetime):
        return True
    else:
        return False


# 计算时间段的权重
def check_time_and_add_value(hour):
    """
    2025-02-11 shp 判断时间权重，
        # 5点到12点 0.333,
        # 12点到17点 0.666,
        # 17点到20点 0.999
    参数:
    datetime (hour): 需要判断的datetime对象中的hour属性

    返回:
    bool:权重值
    """
    if 5 <= hour < 12:
        return 1/3
    elif 12 <= hour < 17:
        return 2/3
    elif 17 <= hour < 20:
        return 3/3
    else:
        return 0.0  # 如果时间不在任何指定时间段内，返回0或其他默认值

if __name__ == '__main__':
     datetime1 = datetime(2024, 12, 24, 19, 40)
     datetime2 = datetime(2024, 12, 27, 8, 45)
     datetime3 = datetime(2024, 12, 27, 15, 25)
     datetime4 = datetime(2025, 1,11 , 20, 27)
     days= calculate_time_difference(datetime1,datetime2)
     print(f"Days1: {days}")
     days2= calculate_time_difference(datetime3, datetime4)
     print(f"Days2: {days2}")
    # days3, hours3, minutes3, seconds3 = calculate_time_difference(datetime1, datetime4)
    # print(f"Days2: {days3}, Hours2: {hours3}, Minutes2: {minutes3}, Seconds2: {seconds3}")